import request from '@/sheep/request';

export const DICT_CACHE ='dictCache';

export interface DictData {
  dictType: string;   // 字典类型
  value: string;      // 字典项值
  label: string;      // 字典项标签
  colorType: string;  // 字典项颜色类型（可能为空）
  cssClass: string;   // 字典项CSS类（可能为空）
}

export interface GroupedDictData {
  [dictType: string]: DictData[];  // 根据 dictType 分组的字典数据
}

export const DictUtils = {
  /**
   * 获取字典数据并存储到本地缓存
   */
  async fetchAndCacheDictData() {
    try {
      // 发送请求获取数据
      const {code,data,msg} = await request({url: 'system/dict-data/simple-list',method: 'GET'});
      // 判断请求是否成功
      if (code === 0) {
        const dictData = data as DictData[];  // 使用 DictData 类型

        // 分组存储数据
        const groupedData: GroupedDictData = {};

        dictData.forEach(item => {
          if (!groupedData[item.dictType]) {
            groupedData[item.dictType] = [];
          }
          item["text"] = item.label;
          groupedData[item.dictType].push(item);
        });

        // 存储到本地缓存
        uni.setStorageSync(DICT_CACHE, groupedData);
        console.log('字典数据已成功存储');
      } else {
        console.error('请求失败:', msg);
      }
    } catch (error) {
      console.error('请求发生错误:', error);
    }
  },

  /**
   * 根据 dictType 获取对应的字典数据
   * @param {string} dictType 字典类型
   * @returns {Array<DictData>} 返回对应字典数据数组
   */
  getDictData(dictType: string): DictData[] {
    const allData: GroupedDictData = uni.getStorageSync(DICT_CACHE) || {};
    return allData[dictType] || [];  // 如果缓存中没有该类型，返回空数组
  },

  /**
   * 获取所有字典类型的数据
   * @returns {GroupedDictData} 返回按 dictType 分组的所有字典数据
   */
  getAllDictData(): GroupedDictData {
    const allData = uni.getStorageSync(DICT_CACHE);
    return allData || {};  // 如果缓存中没有，返回空对象
  }
};
